home *** CD-ROM | disk | FTP | other *** search
/ MacWorld 1999 January - Disc 2 / Macworld (1999-01) (Disk 2).dmg / Serious Demos / Symbolic Composer 4.2 / Environment / System / DEF / Process / Fades / do-fades next >
Text File  |  1998-10-23  |  6KB  |  118 lines

  1. do-fades fin onset fout &optional fin-time fout-time
  2.  
  3. This function lets you generate automaticly fades at the beginning and end of each "----   -------" active timesheet range. The fin parameter is the start value, onset is the steady state value, and fout is the value the fading will end. The fade in and fade out are both by default 1/4 length of the total length of the active timesheet range. If the timesheet range has only on "  -  " active range then onset value is used and no fading takes place. The default behaviour can be controlled with optional fin-time and fout-time parameters. When supplied these parameters will set the fade in and fade out length to the equal amounts of timesheet ranges, for example fin-time 2 and fout-time 4 will generate fade in that lasts 2 timesheet columns, and fade out that lasts 4 timesheet columns.
  4.  
  5. Fading must be used in context below. A fader is an extra control-only instrument which outputs to the same channel as the actual instrument, but is sending only MIDI controller data. The rate in this example is set to 1/16, that means that each 1/16 a new MIDI volume data is generated.
  6.  
  7. (def-orchestra 'orchestra
  8.    all-instruments (choir heart)
  9.    choir (voices1 voices2 voices3)
  10.    heart (heartbeat heartcnt)
  11.    voices1 (voice1 voice1cnt)
  12.    voices2 (voice2 voice2cnt)
  13.    voices3 (voice3 voice3cnt)
  14. )
  15.  
  16. (def-grammar 'minimal-theme
  17.   a (a b)
  18.   b (b a)
  19. )
  20.  
  21. The following defines the faders. Note that faders are just like any ordinary SCOM instruments and all necessary basic definitions must exist (zone, tonality, symbol, velocity, length). This can be simplified by grouping faders to instruments, and using the inheritation to give the values to the instruments, like here the timesheet definition gives values to voices1, which inherits to both the voice1 and voice1nt. Note that the beat patterns are not defined for the faders here, but only for the instruments.
  22.  
  23. (def-section-timesheet sect-a
  24.             ;    1   5   9   13  17  21  25  29  33  37  41  45  49  53  57  61  65  69  73  77  81
  25.    with 1/1 ;    !---!---!---!---!---!---!---!---!---!---!---!---!---!---!---!---
  26.    tonality     "                    .               " '((kumoi g# 3) (hirajoshi d 3))
  27.    heart        "--------                      ------"
  28.    voices1      "----------------          ------    "
  29.    voices2      "    ----------------    ----------  "
  30.    voices3      "        --------------------        "
  31.    ;
  32.    ; bass patterns
  33.    ;
  34.    beat 1/8 ;  !---!---!---!---!---!---!---!---!---!---!---!---!---!---!---!---!
  35.    heartbeat  "-       ---     " '(a) with '(65 55)
  36.    voice1     "-   -   -   -   -   -   -   -   -   -   -   -   -   -   -   -   " (gen-trans a 4 'minimal-theme) with '(65 55 45 75)
  37.    voice2     "-     -     -     -     -     -     -     -     -     -     -   " (gen-trans b 4 'minimal-theme) with '(65 55 65 75)
  38.    voice3     "-       -       -       -       -       -       -       -       " (gen-trans a 4 'minimal-theme) with '(65 55)
  39. )
  40.  
  41. Here the fader channels, symbols, velocities and lengths are defined. Fader does not output notes, hence rest symbol '(=) is needed. Velocity slot just needs a value and so '(0) is supplied. Length determines the rate that the do-fades does it operation. It must be preceeded before do-fades command, otherwised do-fades does not work properly. Setting the length differently will effect the smoothness of the do-fades operation.
  42.  
  43. Note also here the use of adjust-symbol and adjust-duration. These special functions will work with timesheets and adjust the symbol definitions and durations so that each note plays the maximum note lengths determined by the above timesheet. In most cases this gives much more natural musical results than setting durations to a fixed value.
  44.  
  45. Another important feature is here the combination of do-fit and sheetlen functions. They allow to make perfect designs on the panning and filtering. Length slot value will control the rate that these controller values are send. sheetlen returns the number of events needed to fill in the section with this length rate, and you can use this to determine the length of gen-sin, for example. do-fit then adjusts the vector to a range around center value 64 and distributes the values over the zones of the section. Use do-fit2 if you want to give range values directly as-is. Center 64 is used in MU80 and all controllers relate to it as negative or positive shifts. Internally do-fit uses vector-round.
  46.  
  47. (def-section sect-a
  48.    heartcnt
  49.      channel 1
  50.      symbol '(=)
  51.      velocity '(0)
  52.      length '(1/16) 
  53.      controller (mu80-controllers
  54.                   volume (do-fades 20 65 0)
  55.                   panning (do-fit -40 40 (gen-sin (* 2 6 (fibonacci 7)) 2 (sheetlen)))
  56.                   filter (do-fit 0 25 (gen-sin (* 2 6 (fibonacci 5)) 2 (sheetlen))))
  57.    voice1cnt
  58.      channel 3
  59.      symbol '(=)
  60.      velocity '(0)
  61.      length '(1/16) 
  62.      controller (mu80-controllers
  63.                   volume (do-fades 20 55 0 4 6))
  64.    voice2cnt
  65.      channel 2
  66.      symbol '(=)
  67.      velocity '(0)
  68.      length '(1/16) 
  69.      controller (mu80-controllers
  70.                   volume (do-fades 0 54 0 6 6))
  71.   voice3cnt
  72.      channel 4
  73.      symbol '(=)
  74.      velocity '(0)
  75.      length '(1/16) 
  76.      controller (mu80-controllers
  77.                   volume (do-fades 20 64 0 4 6))
  78.    heartbeat
  79.      channel 1
  80.      symbol (adjust-symbol)
  81.      length '(1/8) 
  82.      duration (adjust-duration)
  83.      controller (mu80-controllers
  84.                   filter (list (vector-round 50 90 (gen-sin 1 0.3 32))))
  85.    voice1
  86.      channel 3
  87.      symbol (adjust-symbol)
  88.      length '(1/8) 
  89.      duration (adjust-duration)
  90.      controller (mu80-controllers
  91.                   filter (list (vector-round 50 90 (gen-sin 1 0.3 32))))
  92.    voice2
  93.      channel 2
  94.      symbol (adjust-symbol)
  95.      length '(1/8) 
  96.      duration (adjust-duration)
  97.      controller (mu80-controllers
  98.                   filter (list (vector-round 50 90 (gen-sin 1 0.3 32))))
  99.    voice3
  100.      channel 4
  101.      symbol (adjust-symbol)
  102.      length '(1/8) 
  103.      duration (adjust-duration)
  104.      controller (mu80-controllers
  105.                   filter (list (vector-round 50 90 (gen-sin 1 0.3 32))))
  106. )
  107.  
  108. (def-expression
  109.     default ((legato 90 10 0.4) (velocity 10 0.4))
  110.     voice3 ((legato 100 10 0.4) (velocity 15 0.4))
  111. )
  112.  
  113. (def-tempo 74)
  114.  
  115. (play-file-p "Initiation"
  116.    all-instruments '(sect-a)
  117. )
  118.